﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations;
using planerka.DataAccess.DataService;
using planerka.Common;

namespace planerka.DataAccess.Models
{
    [MetadataType(typeof(taskMetaData))]
    public partial class task : IformValuesDates
    {

        public string planStartString { get; set;}
        public string factStartString { get; set; }
        public string planFinishString { get; set; }
        public string factFinishString { get; set; } 
        
        // CREATE
        // задачу может делать в проекте любой человек,
        // который является владельцем проекта или 
        // фигурирует в качестве исполнителей проекта

        // DELETE
        // удалить может только владелец задачи
        // и если по задаче нет других REAL USER

        // у задачи есть - владелец и исполнитель
        // 

        // заголовок - редактируем или создаём новый
        public string caption { get; set; }

        public string addMessage { get; set; }

        // включен в список потому что есть платежи за этот период,
        // но даты задачи в период фильтра не входят
        public bool includeByPayment { get; set; } 

        public int sumInTotal { get; set; }
        public int sumOutTotal { get; set; }
        public int sumInPeriod { get; set; }
        public int sumOutPeriod { get; set; }

        // внести платеж
        public int addPayment { get; set; }
        public string addPaymentComment { get; set; }
        public string addPaymentDateString { get; set; }

        // новая
        public bool isNew
        { 
            get { return this.ID == 0; } 
            set { isNew = value; } 
        }

        // права на просмотр и добавление сообщений
        public bool rightsView
        {
            get
            {
                user currentUser = new UserService().getCurrentUser();
                return isNew || new TaskService().getTasksList(currentUser.ID).Where(p => p.ID == this.ID).Count() > 0;
            }
            set { rightsView = value; }
        }

        // права на редактирование и удаление
        public bool rightsEditDelete
        {
            get
            {
                user currentUser = new UserService().getCurrentUser();
                return isNew || new TaskService().getTasksList(currentUser.ID, getOnlyMyTasks: true).Where(p => p.ID == this.ID).Count() > 0;
            }
            set { rightsEditDelete = value; }
        }

        //// права на удаление
        //public bool rightsDelete { get; set; }

        public class taskMetaData
        {
            
            [Required(ErrorMessage = "Введите целое число")]
            public int addPayment { get; set; }
        }
    }
}
